<html>

	<head>
		<title>6.4.3 for 指令</title>
		<meta charset="utf-8" />
		<meta name="author" content="jfinal,yaolin" />
		<meta name="Keywords" content="" />
		<link rel="stylesheet" type="text/css" href="../../css/global.css" />
	</head>

	<body>
		<h1>6.4.3 for 指令</h1>
		<p>JFinal Template Engine 对 for 指令进行了极为人性化的扩展，可以对任意类型数据进行迭 代输出，包括支持 null 值迭代。以下是代码示例：</p>
		<img src="../../images/templateEngine/6.4.3.1.png" />
		<p>上图代码中展示了 for 指令迭代输出。 第一个 for 指令是对 list 进行迭代输出， 用法与 java 语法完全一样，第二个 for 指令是对 map 进行迭代，取值方式为 item.key 与 item.value。</p>
		<p>注意：当被迭代的目标为 null 时，不需要做 null 值判断， for 指令会直接跳过 null 值，不 进行迭代。
		</p>
		<p>for 指令还支持对其状态进行获取，代码示例：</p>
		<img src="../../images/templateEngine/6.4.3.2.png" />
		<p>以上代码中的#(for.index)、 #(for.outer.index)是对 for 指令当前状态值进行获取，前者是获 取当前 for 指令迭代的下标值(从 0 开始的整数)，后者是内层 for 指令获取上一层 for 指令的状 态。这里注意 for.outer 这个固定的用法，专门用于在内层 for 指令中引用上层 for 指令状态。 </p>
		<p class="red">注意： for 指令嵌套时，各自拥有自己的变量名作用域，规则与 java 语言一致，例如上例中的 两个#(x.field)处在不同的 for 指令作用域内， 会正确获取到所属作用域的变量值。</p>
		<p>for 指令支持的所有状态值如下图：</p>
		<img src="../../images/templateEngine/6.4.3.3.png" />
		<p>具体用法已在图中用中文进行了说明，在此不再赘述。</p>
		<p>除了 Map、 List 以外， for 指令还支持 Collection、 Iterator、 array 普通数组、 Iterable、 Enumeration、 null 值的迭代，用法在形式上与前面的 List 迭代完全相同，都是#for(id : target) 的形式，对于 null 值， for 指令会直接跳过不迭代。</p>
		<p>此外， for 指令还支持对任意类型进行迭代，此时仅仅是对该对象进行一次性迭代，如下 所示：
		</p>
		<img src="../../images/templateEngine/6.4.3.4.png" />
		<p>上图中的 article 为一个普通的 java 对象，而非集合类型对象， for 循环会对该对象进行一 次性迭代操作， for 表达式中的 x 即为 article 对象本身，所以可以使用#(x.title)进行输出。</p>
		<p><span class="red">for 指令还支持#else 分支语句</span>，在 for 指令迭代次数为 0 时，将执行#else 分支内部的语句， 如下是示例：
		</p>
		<img src="../../images/templateEngine/6.4.3.5.png" />
		<p>以上代码中，当 blogList.size() 为 0 或者 blogList 为 null 值时，也即迭代次数为 0 时，会 执行#else 分支，这种场景在 web 项目中极为常见。</p>
		<p>最后，除了上面介绍的 for 指令迭代用法以外，还支持更常规的 for 语句形式，以下是代 码示例：
		</p>
		<img src="../../images/templateEngine/6.4.3.6.png" />
		<p>与 java 语法基本一样，唯一的不同是变量声明不需要类型，直接用赋值语句即可， JFinal Template Engine 中的变量是动态弱类型。</p>
		<p>注意： 以上这种形式的 for 语句，比前面的 for 迭代少了 for.size 与 for.last 两个状态，只支 持如下几个状态： for.index、 for.count、 for.first、 for.odd、 for.even、 for.outer</p>
		<p>for 指令还支持 <span class="red">continue、 break </span>指令，用法与 java 完全一致，在此不再赘述。</p>
	</body>

</html>